import 'dart:io';

void main(List<String> args) async {
  // 1.回调地狱
  // getFirstData().then((value1) => {
  //       print('第一层结果是: $value1'),
  //       getSecondData().then((value2) => {
  //             print('第二层结果是: $value2'),
  //             getThirdData().then((value3) => {
  //                   print('第三层结果是: $value3'),
  //                 })
  //           })
  //     });

  // 2.链式调用
  // getFirstData().then((value) {
  //   print('第一层结果是: $value');
  //   return getSecondData();
  // }).then((value) {
  //   print('第二层结果是: $value');
  //   return getThirdData();
  // }).then((value) {
  //   print('第三层结果是: $value');
  // });

  // 3.async await
  try {
    String result1 = await getFirstData();
    print('第一层结果是: $result1');
    String result2 = await getSecondData();
    print('第二层结果是: $result2');
    String result3 = await getThirdData();
    print('第三层结果是: $result3');
  } catch (e) {
    print('错误信息是: $e');
  }
}

Future<String> getFirstData() {
  return Future<String>(() {
    sleep(Duration(seconds: 2));
    print('获取第一个数据完成');
    return '1';
  });
}

Future<String> getSecondData() {
  return Future<String>(() {
    sleep(Duration(seconds: 2));
    print('获取第二个数据完成');
    return '2';
  });
}

Future<String> getThirdData() {
  return Future<String>(() {
    sleep(Duration(seconds: 2));
    print('获取第三个数据完成');
    throw Exception('第三个数据获取失败');
    // return '3';
  });
}
